在軟件領域,JAR檔案(Java歸檔,英語:Java ARchive)是一種軟件套件檔案格式,通常用於聚合大量的Java類別檔案、相關的元數據和資源(文字、圖片等)檔案到一個檔案,以便分發Java平台應用軟件或庫。[3]
JAR檔案是一種歸檔檔案,以ZIP格式構建,以.jar
為副檔名。用戶可以使用JDK內建的jar命令建立或提取JAR檔案。也可以使用其他zip
壓縮工具,不過壓縮時zip檔案頭裏的條目順序很重要,因為Manifest檔案常需放在首位。JAR檔案內的檔名是Unicode文字。[4]
設計
一個JAR檔案允許Java執行時高效地部署一組類和它們相關的資源。JAR檔案中的元素可以被壓縮,這樣一來,在單個請求中下載整個應用程式,使得下載一個JAR檔案比對構成一個Java應用的許多未壓縮的檔案單獨下載更方便。包java.util.zip包含讀寫JAR檔案的類。
JAR檔案在路徑META-INF/MANIFEST.MF下有一個可選的Manifest檔案。Manifest檔案中的條目定義這個JAR檔案如何被使用。例如,類路徑條目由其他JAR檔案的絕對或相對路徑的列表組成,用於指定在載入本JAR檔案時同時載入的其他JAR檔案。雖然旨在簡化JAR的使用,但在實踐中證明Manifest檔案是非常脆弱的,因為入口點JAR在建立時依賴於所有相關的JAR的確切位置。一旦需要更改版本或庫的位置,必需重建Manifest檔案。
為了提取JAR檔案的內容,用戶可以使用任何標準的unzip解壓縮軟件,或者每個Java虛擬機器都帶有的jar
命令:「jar -xf foo.jar
」。
開發者可以對JAR檔案進行數碼簽章。在這種情況下,簽章資訊成為嵌入的Manifest檔案的一部分。JAR本身並沒有被簽章,而是歸檔內的每一個檔案的校驗和連同其名字作為簽章,被記錄在Manifest檔案中。多個實體可能簽署一個JAR檔案,並在每次簽章時改變這個JAR檔案,雖然簽署檔案本身仍然有效。當Java執行時載入簽章的JAR檔案時,它可以驗證簽章並拒絕載入簽章不匹配的類。Java執行時也支援「密封」的包(Sealed Packages)。類別載入器一旦成功裝載密封包中的某個類後,其後載入的類必須是由同一實體簽章,才被允許載入到同一個包。這可以防止惡意代碼被插入到現有的軟件套件,以至於接觸到包範圍內的類和數據。
開發者可以對JAR檔案進行混淆,這樣該JAR檔案的用戶無法得到關於該JAR檔案所包含的代碼的太多資訊,並且能夠壓縮檔案大小。這在空間受限的嵌入式系統開發中很有用。
一個可執行Java程式以及其使用的庫檔案可以打包在一個JAR檔案中。
可執行的JAR檔案中的Manifest檔案用代碼Main-Class: myPrograms.MyClass
指定了入口點類,注意要指明該類的路徑(-cp參數將被忽略)。有些作業系統可以在點擊後直接執行可執行JAR檔案。而更典型的呼叫則是通過命令列執行「java -jar foo.jar
」。
在多數平台上可以使用封裝器封裝可執行JAR檔案。例如,對於更喜歡使用Windows EXE的Microsoft Windows用戶而言,可以使用工具(如JSmooth、Launch4J、WinRun4J、Nullsoft指令碼安裝系統等),將單個JAR檔案轉換為可執行檔案。
Manifest
在Java平台中, Manifest檔案是JAR歸檔中所包含的特殊檔案。[5][6]Manifest檔案被用來定義擴充或檔案打包相關數據。Manifest檔案是一個元數據檔案,它包含了不同部分中的鍵-值對數據。如果一個JAR檔案被當作可執行檔案,則其中的Manifest檔案需要指出該程式的主類檔案。通常Manifest檔案的檔名為MANIFEST.MF
。
通常Manifest檔案都與Java檔案相關,其他的情況比較少見。
Apache Ant的Zip/JAR支援
在Apache Ant構建工具中有其自己的包——org.apache.tools.zip,用來讀寫Zip和JAR歸檔檔案,並包括對Unix檔案系統的支援。org.apache.tools.zip包發佈在Apache軟件基金會許可下,並被設計成在Ant之外使用。
相關格式
幾種相關的檔案格式建立在JAR格式的基礎上:
- WAR (Web應用程式歸檔,英語:Web application archive),也是一種Java歸檔,儲存XML檔案、Java類別、JSP和Web應用程式中的其他檔案。
- RAR(資源配接器歸檔,英語:Resource adapter archive),這裏不是指RAR檔案格式),也是一種Java歸檔,儲存XML檔案、Java類別和Java EE連接器架構(JCA)應用中的其他檔案。
- EAR (檔案格式) (英語:Enterprise archive),是一種複合式Java歸檔檔案,包含了XML檔案、Java類別和針對Java EE應用的其他Java歸檔檔案,例如JAR、WAR和RAR。
- SAR(英語:Service archive),與EAR類似。它提供了service.xml檔案和相應的JAR檔案。
- APK (Android應用程式包檔案,英語:Android application package)Java歸檔格式的一個變種,用於Android應用程式。[7]
參見
- JAR hell
- Open Packaging Conventions
- Java應用程式描述符
參考文獻
外部連結
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.